<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>Feature testing (C++20) - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../common/favicon.ico">
<link rel="stylesheet" href="../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"cpp/feature_test","wgTitle":"cpp/feature test","wgCurRevisionId":141269,"wgArticleId":14049,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"cpp/feature_test","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-cpp {line-height: normal;}
.source-cpp li, .source-cpp pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for cpp
 * CSS class: source-cpp, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.cpp.source-cpp .de1, .cpp.source-cpp .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.cpp.source-cpp  {font-family:monospace;}
.cpp.source-cpp .imp {font-weight: bold; color: red;}
.cpp.source-cpp li, .cpp.source-cpp .li1 {font-weight: normal; vertical-align:top;}
.cpp.source-cpp .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.cpp.source-cpp .li2 {font-weight: bold; vertical-align:top;}
.cpp.source-cpp .kw1 {color: #0000dd;}
.cpp.source-cpp .kw2 {color: #0000ff;}
.cpp.source-cpp .kw3 {color: #0000dd;}
.cpp.source-cpp .kw4 {color: #0000ff;}
.cpp.source-cpp .co1 {color: #909090;}
.cpp.source-cpp .co2 {color: #339900;}
.cpp.source-cpp .coMULTI {color: #ff0000; font-style: italic;}
.cpp.source-cpp .es0 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es1 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es2 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es3 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es4 {color: #008000; font-weight: bold;}
.cpp.source-cpp .es5 {color: #008000; font-weight: bold;}
.cpp.source-cpp .br0 {color: #008000;}
.cpp.source-cpp .sy0 {color: #008000;}
.cpp.source-cpp .sy1 {color: #000080;}
.cpp.source-cpp .sy2 {color: #000040;}
.cpp.source-cpp .sy3 {color: #000040;}
.cpp.source-cpp .sy4 {color: #008080;}
.cpp.source-cpp .st0 {color: #008000;}
.cpp.source-cpp .nu0 {color: #000080;}
.cpp.source-cpp .nu6 {color: #000080;}
.cpp.source-cpp .nu8 {color: #000080;}
.cpp.source-cpp .nu12 {color: #000080;}
.cpp.source-cpp .nu16 {color:#000080;}
.cpp.source-cpp .nu17 {color:#000080;}
.cpp.source-cpp .nu18 {color:#000080;}
.cpp.source-cpp .nu19 {color:#000080;}
.cpp.source-cpp .ln-xtra, .cpp.source-cpp li.ln-xtra, .cpp.source-cpp div.ln-xtra {background-color: #ffc;}
.cpp.source-cpp span.xtra { display:block; }

/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for text
 * CSS class: source-text, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text  {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_feature_test skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading">Feature testing <span class="t-mark-rev t-since-cxx20">(C++20)</span></h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../cpp.html" title="cpp">cpp</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../cpp.html" title="cpp"> C++</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="compiler_support.html" title="cpp/compiler support"> Compiler support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="freestanding.html" title="cpp/freestanding"> Freestanding and hosted</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="language.html" title="cpp/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="header.html" title="cpp/header"> Standard library headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="named_req.html" title="cpp/named req"> Named requirements </a> </td></tr>
<tr class="t-nv"><td colspan="5"> <strong class="selflink"> Feature test macros </strong> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="utility.html#Language_support" title="cpp/utility"> Language support library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="concepts.html" title="cpp/concepts"> Concepts library</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="meta.html" title="cpp/meta"> Metaprogramming library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="error.html" title="cpp/error"> Diagnostics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="utility.html" title="cpp/utility"> General utilities library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="string.html" title="cpp/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="container.html" title="cpp/container"> Containers library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="iterator.html" title="cpp/iterator"> Iterators library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="ranges.html" title="cpp/ranges"> Ranges library</a> <span class="t-mark-rev t-since-cxx20">(C++20)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="algorithm.html" title="cpp/algorithm"> Algorithms library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="numeric.html" title="cpp/numeric"> Numerics library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="locale.html" title="cpp/locale"> Localizations library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="io.html" title="cpp/io"> Input/output library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="filesystem.html" title="cpp/filesystem"> Filesystem library</a> <span class="t-mark-rev t-since-cxx17">(C++17)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="regex.html" title="cpp/regex"> Regular expressions library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="thread.html" title="cpp/thread"> Concurrency support library</a> <span class="t-mark-rev t-since-cxx11">(C++11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="experimental.html" title="cpp/experimental"> Technical specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="symbol_index.html" title="cpp/symbol index"> Symbols index</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="links/libs.html" title="cpp/links/libs"> External libraries</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><strong class="selflink"> Feature testing</strong></div><div class="t-navbar-sep"> </div></div>
<p>The standard defines a set of <a href="preprocessor/replace.html" title="cpp/preprocessor/replace">preprocessor macros</a> corresponding to C++ language and library features introduced in C++11 or later. They are intended as a simple and portable way to detect the presence of said features.
</p>
<h3><span class="mw-headline" id="Attributes">Attributes</span></h3>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"> <code><b>__has_cpp_attribute(</b></code> <span class="t-spar">attribute-token</span> <code><b>)</b></code>
</td>
<td class="t-sdsc-nopad">
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<p>Checks for the presence of an <a href="language/attributes.html" title="cpp/language/attributes">attribute</a> named by <span class="t-spar">attribute-token</span> (after macro expansion).
</p><p>For standard attributes, it will expand to the year and month in which the attribute was added to the working draft (see table below), the presence of vendor-specific attributes is determined by a non-zero value.
</p><p><code>__has_cpp_attribute</code> can be expanded in the expression of <a href="preprocessor/conditional.html" title="cpp/preprocessor/conditional"><tt>
#if</tt></a> and <a href="preprocessor/conditional.html" title="cpp/preprocessor/conditional"><tt>
#elif</tt></a>.
It is treated as a defined macro by <a href="preprocessor/conditional.html" title="cpp/preprocessor/conditional"><tt>
#ifdef</tt></a>, <a href="preprocessor/conditional.html" title="cpp/preprocessor/conditional"><tt>
#ifndef</tt></a> and <a href="preprocessor/conditional.html" title="cpp/preprocessor/conditional"><tt>defined</tt></a> but cannot be used anywhere else.
</p>
<table class="wikitable sortable">

<tr>
<th> <span class="t-spar">attribute-token</span>
</th>
<th> Attribute
</th>
<th> Value
</th>
<th> <span title="Standard in which the feature is introduced">Standard</span>
</th></tr>
<tr>
<td><code>carries_dependency</code>
</td>
<td><code>[[<a href="language/attributes/carries_dependency.html" title="cpp/language/attributes/carries dependency">carries_dependency</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td><code>deprecated</code>
</td>
<td><code>[[<a href="language/attributes/deprecated.html" title="cpp/language/attributes/deprecated">deprecated</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td><code>fallthrough</code>
</td>
<td><code>[[<a href="language/attributes/fallthrough.html" title="cpp/language/attributes/fallthrough">fallthrough</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td><code>likely</code>
</td>
<td><code>[[<a href="language/attributes/likely.html" title="cpp/language/attributes/likely">likely</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td><code>maybe_unused</code>
</td>
<td><code>[[<a href="language/attributes/maybe_unused.html" title="cpp/language/attributes/maybe unused">maybe_unused</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td><code>no_unique_address</code>
</td>
<td><code>[[<a href="language/attributes/no_unique_address.html" title="cpp/language/attributes/no unique address">no_unique_address</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="2"> <code>nodiscard</code>
</td>
<td rowspan="2"> <code>[[<a href="language/attributes/nodiscard.html" title="cpp/language/attributes/nodiscard">nodiscard</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td><code>noreturn</code>
</td>
<td><code>[[<a href="language/attributes/noreturn.html" title="cpp/language/attributes/noreturn">noreturn</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td><code>unlikely</code>
</td>
<td><code>[[<a href="language/attributes/likely.html" title="cpp/language/attributes/likely">unlikely</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr></table>
<h3><span class="mw-headline" id="Language_features">Language features</span></h3>
<p>The following macros are predefined in every translation unit. Each macro expands to an integer literal corresponding to the year and month when the corresponding feature has been included in the working draft.
</p><p>When a feature changes significantly, the macro will be updated accordingly.
</p>
<div class="t-template-editlink" style="">
</div>
<table class="wikitable sortable">

<tr>
<th> Macro name
</th>
<th> Feature
</th>
<th> Value
</th>
<th> <abbr title="Standard in which the feature is introduced; DR means defect report against that revision">Std</abbr>
</th></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aggregate_bases</span></span> </td>
<td> <a href="language/aggregate_initialization.html" title="cpp/language/aggregate initialization">Aggregate classes</a> with base classes </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aggregate_nsdmi</span></span> </td>
<td> <a href="language/aggregate_initialization.html" title="cpp/language/aggregate initialization">Aggregate classes</a> with <a href="language/data_members.html#Member_initialization" title="cpp/language/data members">default member initializers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aggregate_paren_init</span></span> </td>
<td> <a href="language/aggregate_initialization.html" title="cpp/language/aggregate initialization">Aggregate initialization</a> in the form of <a href="language/direct_initialization.html" title="cpp/language/direct initialization">direct initialization</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_alias_templates</span></span> </td>
<td> <a href="language/type_alias.html" title="cpp/language/type alias">Alias templates</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_aligned_new</span></span> </td>
<td> <a href="memory/new/align_val_t.html" title="cpp/memory/new/align val t">Dynamic memory allocation for over-aligned data</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_attributes</span></span> </td>
<td> <a href="language/attributes.html" title="cpp/language/attributes">Attributes</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_binary_literals</span></span> </td>
<td> <a href="language/integer_literal.html" title="cpp/language/integer literal">Binary literals</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_capture_star_this</span></span> </td>
<td> <a href="language/lambda.html#Lambda_capture" title="cpp/language/lambda">Lambda capture of *this by value as [=,*this] </a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_char8_t</span></span> </td>
<td> <a href="keyword/char8_t.html" title="cpp/keyword/char8 t"><tt>char8_t</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_concepts</span></span> </td>
<td> <a href="language/constraints.html" title="cpp/language/constraints">Concepts</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> Conditional trivial special member functions </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_conditional_explicit</span></span> </td>
<td> <a href="language/explicit.html" title="cpp/language/explicit"><code>explicit(bool)</code></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_consteval</span></span> </td>
<td> <a href="language/consteval.html" title="cpp/language/consteval">Immediate functions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="6"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constexpr</span></span> </td>
<td> <a href="language/constexpr.html" title="cpp/language/constexpr"><tt>constexpr</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <a href="language/constexpr.html#relaxed-constexpr" title="cpp/language/constexpr">Relaxed <code>constexpr</code></a>, <a href="language/constexpr.html#constexpr-method-is-const" title="cpp/language/constexpr">non-<code>const</code> <code>constexpr</code> methods</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <a href="language/lambda.html" title="cpp/language/lambda">Constexpr lambda</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> Trivial <a href="language/default_initialization.html" title="cpp/language/default initialization">default initialization</a> and <a href="language/asm.html" title="cpp/language/asm">asm-declaration</a> in constexpr functions </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> Changing the active member of a union in constant evaluation </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> Non-<a href="named_req/LiteralType.html" title="cpp/named req/LiteralType">literal</a> variables, labels, and <a href="language.html" title="cpp/language"><tt>goto</tt></a> statements in constexpr functions </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constexpr_dynamic_alloc</span></span> </td>
<td> Operations for dynamic storage duration in constexpr functions </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constexpr_in_decltype</span></span> </td>
<td> Generation of function and variable definitions when <a href="language/constant_expression.html#Functions_and_variables_needed_for_constant_evaluation" title="cpp/language/constant expression">needed for constant evaluation</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_constinit</span></span> </td>
<td> <a href="language/constinit.html" title="cpp/language/constinit"><tt>constinit</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_decltype</span></span> </td>
<td> <a href="language/decltype.html" title="cpp/language/decltype"><tt>decltype</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200707L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_decltype_auto</span></span> </td>
<td> <a href="language/auto.html" title="cpp/language/auto">Return type deduction for normal functions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_deduction_guides</span></span> </td>
<td> <a href="language/deduction_guide.html" title="cpp/language/class template argument deduction">Template argument deduction for class templates</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <a href="language/deduction_guide.html" title="cpp/language/class template argument deduction"><abbr title="Class template argument deduction">CTAD</abbr></a> for aggregates and aliases </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_delegating_constructors</span></span> </td>
<td> <a href="language/initializer_list.html#Delegating_constructor" title="cpp/language/initializer list" class="mw-redirect">Delegating constructors</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200604L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_designated_initializers</span></span> </td>
<td> <a href="language/aggregate_initialization.html#Designated_initializers" title="cpp/language/aggregate initialization">Designated initializer</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201707L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_enumerator_attributes</span></span> </td>
<td> Attributes for <a href="language/enum_class.html" title="cpp/language/enum">enumerators</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_explicit_this_parameter</span></span> </td>
<td> Explicit object parameter </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_fold_expressions</span></span> </td>
<td> <a href="language/fold.html" title="cpp/language/fold">Fold expressions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_generic_lambdas</span></span> </td>
<td> <a href="language/lambda.html" title="cpp/language/lambda">Generic lambda expressions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> Explicit template parameter list for <a href="language/lambda.html" title="cpp/language/lambda">generic lambdas</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201707L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_guaranteed_copy_elision</span></span> </td>
<td> Guaranteed copy elision through simplified <a href="language/value_category.html" title="cpp/language/value category">value categories</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_hex_float</span></span> </td>
<td> <a href="language/floating_literal.html" title="cpp/language/floating literal">Hexadecimal floating literals</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_if_consteval</span></span> </td>
<td> <a href="language/if.html" title="cpp/language/if"><code>consteval if</code></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_if_constexpr</span></span> </td>
<td> <a href="language/if.html" title="cpp/language/if"><code>constexpr if</code></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_impl_coroutine</span></span> </td>
<td> <a href="language/coroutines.html" title="cpp/language/coroutines">Coroutines</a> (compiler support) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_impl_destroying_delete</span></span> </td>
<td> <a href="memory/new/operator_delete.html" title="cpp/memory/new/operator delete">Destroying operator delete</a> (compiler support) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_impl_three_way_comparison</span></span> </td>
<td> <a href="language/operator_comparison.html#Three-way_comparison" title="cpp/language/operator comparison">Three-way comparison</a> (compiler support) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_inheriting_constructors</span></span> </td>
<td> <a href="language/using_declaration.html#Inheriting_constructors" title="cpp/language/using declaration">Inheriting constructors</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200802L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> Rewording inheriting constructors </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201511L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_init_captures</span></span> </td>
<td> <a href="language/lambda.html" title="cpp/language/lambda">Lambda init-capture</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> Allow pack expansion in <a href="language/lambda.html" title="cpp/language/lambda">lambda</a> init-capture </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_initializer_lists</span></span> </td>
<td> <a href="language/list_initialization.html" title="cpp/language/list initialization">List-initialization</a> and <span class="t-lc"><a href="utility/initializer_list.html" title="cpp/utility/initializer list">std::initializer_list</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200806L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_inline_variables</span></span> </td>
<td> <a href="language/inline.html" title="cpp/language/inline">Inline variables</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lambdas</span></span> </td>
<td> <a href="language/lambda.html" title="cpp/language/lambda">Lambda expressions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_modules</span></span> </td>
<td> <a href="language/modules.html" title="cpp/language/modules">Modules</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_multidimensional_subscript</span></span> </td>
<td> Multidimensional <a href="language/operator_member_access.html" title="cpp/language/operator member access">subscript operator</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_namespace_attributes</span></span> </td>
<td> Attributes for <a href="language/namespace.html" title="cpp/language/namespace">namespaces</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_noexcept_function_type</span></span> </td>
<td> Make <a href="language/noexcept_spec.html" title="cpp/language/noexcept spec">exception specifications</a> be part of the type system </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_nontype_template_args</span></span> </td>
<td> Allow constant evaluation for all <a href="language/template_parameters.html#Template_non-type_arguments" title="cpp/language/template parameters">non-type template arguments</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> Class types and floating-point types in <a href="language/template_parameters.html#Non-type_template_parameter" title="cpp/language/template parameters">non-type template parameters</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_nontype_template_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">parameter_auto</span></span> </td>
<td> Declaring <a href="language/template_parameters.html#Non-type_template_parameter" title="cpp/language/template parameters">non-type template parameters</a> with <code>auto</code> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_nsdmi</span></span> </td>
<td> <a href="language/data_members.html#Member_initialization" title="cpp/language/data members">Non-static data member initializers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_range_based_for</span></span> </td>
<td> <a href="language/range-for.html" title="cpp/language/range-for">Range-based <code>for</code> loop</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <a href="language/range-for.html#Explanation" title="cpp/language/range-for">Range-based <code>for</code> loop</a> with different <code>begin</code>/<code>end</code> types </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_raw_strings</span></span> </td>
<td> <a href="language/string_literal.html" title="cpp/language/string literal">Raw string literals</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200710L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_ref_qualifiers</span></span> </td>
<td> <a href="language/member_functions.html" title="cpp/language/member functions">ref-qualifiers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200710L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_return_type_deduction</span></span> </td>
<td> <a href="language/auto.html" title="cpp/language/auto">Return type deduction for normal functions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_rvalue_references</span></span> </td>
<td> <a href="language/reference.html" title="cpp/language/reference">Rvalue reference</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200610L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_size_t_suffix</span></span> </td>
<td> <a href="language/integer_literal.html" title="cpp/language/integer literal">Literal suffixes for <code>size_t</code> and its signed version</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_sized_deallocation</span></span> </td>
<td> <a href="memory/new/operator_delete.html" title="cpp/memory/new/operator delete">Sized deallocation</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_static_assert</span></span> </td>
<td> <a href="language/static_assert.html" title="cpp/language/static assert"><tt>static_assert</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200410L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <a href="language/static_assert.html" title="cpp/language/static assert">Single-argument <code>static_assert</code></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_structured_bindings</span></span> </td>
<td> <a href="language/structured_binding.html" title="cpp/language/structured binding">Structured bindings</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_template_template_args</span></span> </td>
<td> Matching of <a href="language/template_parameters.html#Template_template_arguments" title="cpp/language/template parameters">template template-arguments</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_threadsafe_static_init</span></span> </td>
<td> <a href="language/storage_duration.html#Static_local_variables" title="cpp/language/storage duration">Dynamic initialization and destruction with concurrency</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200806L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_unicode_characters</span></span> </td>
<td> <a href="language/types.html" title="cpp/language/types">New character types</a> (<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char16_t</span></span></span> and <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">char32_t</span></span></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_unicode_literals</span></span> </td>
<td> <a href="language/string_literal.html" title="cpp/language/string literal">Unicode string literals</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200710L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_user_defined_literals</span></span> </td>
<td> <a href="language/user_literal.html" title="cpp/language/user literal">User-defined literals</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200809L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_using_enum</span></span> </td>
<td> <a href="language/enum_class.html#Using-enum-declaration" title="cpp/language/enum"><tt>using enum</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_variable_templates</span></span> </td>
<td> <a href="language/variable_template.html" title="cpp/language/variable template">Variable templates</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_variadic_templates</span></span> </td>
<td> <a href="language/parameter_pack.html" title="cpp/language/parameter pack">Variadic templates</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">200704L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx11">(C++11)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_variadic_using</span></span> </td>
<td> Pack expansions in <a href="language/using_declaration.html" title="cpp/language/using declaration"><code>using</code>-declarations</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr></table>
<p><br>
</p>
<h3><span class="mw-headline" id="Library_features">Library features</span></h3>
<p>The following macros are defined if the header <a href="header/version.html" title="cpp/header/version"><tt>&lt;version&gt;</tt></a> or any of the corresponding headers in the table below is included. Each macro expands to an integer literal corresponding to the year and month when the corresponding feature has been included in the working draft.
</p><p>When a feature changes significantly, the macro will be updated accordingly.
</p>
<div class="t-template-editlink" style="">
</div>
<table class="wikitable sortable">

<tr>
<th> Macro name
</th>
<th> Feature
</th>
<th> Value
</th>
<th> Header
</th>
<th> <abbr title="Standard in which the feature is introduced; DR means defect report against that revision">Std</abbr>
</th></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_adaptor_iterator_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">pair_constructor</span></span> </td>
<td> Iterator pair constructors for <span class="t-lc"><a href="container/stack.html" title="cpp/container/stack">std::stack</a></span> and <span class="t-lc"><a href="container/queue.html" title="cpp/container/queue">std::queue</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/stack.html" title="cpp/header/stack"><tt>&lt;stack&gt;</tt></a> <a href="header/queue.html" title="cpp/header/queue"><tt>&lt;queue&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_addressof_constexpr</span></span> </td>
<td> Constexpr <span class="t-lc"><a href="memory/addressof.html" title="cpp/memory/addressof">std::addressof</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_allocate_at_least</span></span> </td>
<td> <span class="t-lc">std::allocate_at_least</span> etc. </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_allocator_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">traits_is_always_equal</span></span> </td>
<td> <a href="memory/allocator_traits.html" title="cpp/memory/allocator traits"><tt>std::allocator_traits::is_always_equal</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> <a href="header/scoped_allocator.html" title="cpp/header/scoped allocator"><tt>&lt;scoped_allocator&gt;</tt></a> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/deque.html" title="cpp/header/deque"><tt>&lt;deque&gt;</tt></a> <a href="header/forward_list.html" title="cpp/header/forward list"><tt>&lt;forward_list&gt;</tt></a> <a href="header/list.html" title="cpp/header/list"><tt>&lt;list&gt;</tt></a> <a href="header/vector.html" title="cpp/header/vector"><tt>&lt;vector&gt;</tt></a> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_any</span></span> </td>
<td> <span class="t-lc"><a href="utility/any.html" title="cpp/utility/any">std::any</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/any.html" title="cpp/header/any"><tt>&lt;any&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_apply</span></span> </td>
<td> <span class="t-lc"><a href="utility/apply.html" title="cpp/utility/apply">std::apply</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/tuple.html" title="cpp/header/tuple"><tt>&lt;tuple&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_array_constexpr</span></span> </td>
<td> Constexpr for <span class="t-lc"><a href="iterator/reverse_iterator.html" title="cpp/iterator/reverse iterator">std::reverse_iterator</a></span>, <span class="t-lc"><a href="iterator/move_iterator.html" title="cpp/iterator/move iterator">std::move_iterator</a></span>, <span class="t-lc"><a href="container/array.html" title="cpp/container/array">std::array</a></span> and <a href="iterator.html#Range_access" title="cpp/iterator">range access</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> <a href="header/array.html" title="cpp/header/array"><tt>&lt;array&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <a href="named_req/ConstexprIterator.html" title="cpp/named req/ConstexprIterator"><span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">ConstexprIterator</span></a>; constexpr comparison for <span class="t-lc"><a href="container/array.html" title="cpp/container/array">std::array</a></span>; misc constexpr bits (<span class="t-lc"><a href="container/array/fill.html" title="cpp/container/array/fill">std::array::fill</a></span> et al.) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> <a href="header/array.html" title="cpp/header/array"><tt>&lt;array&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_as_const</span></span> </td>
<td> <span class="t-lc"><a href="utility/as_const.html" title="cpp/utility/as const">std::as_const</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_associative_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">heterogeneous_erasure</span></span> </td>
<td> Heterogeneous erasure in <a href="container.html#Associative_containers" title="cpp/container">associative containers</a> and <a href="container.html#Unordered_associative_containers" title="cpp/container">unordered associative containers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_assume_aligned</span></span> </td>
<td> <span class="t-lc"><a href="memory/assume_aligned.html" title="cpp/memory/assume aligned">std::assume_aligned</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_flag_test</span></span> </td>
<td> <span class="t-lc">std::atomic_flag::test</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_float</span></span> </td>
<td> <a href="atomic/atomic.html" title="cpp/atomic/atomic">Floating-point atomic</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">is_always_lock_free</span></span> </td>
<td> <a href="atomic/atomic/is_always_lock_free.html" title="cpp/atomic/atomic/is always lock free"><tt>constexpr atomic&lt;T&gt;::is_always_lock_free</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">lock_free_type_aliases</span></span> </td>
<td> atomic lockfree integral types (<span class="t-lc"><a href="atomic/atomic.html" title="cpp/atomic/atomic">std::atomic_signed_lock_free</a></span>, <span class="t-lc"><a href="atomic/atomic.html" title="cpp/atomic/atomic">std::atomic_unsigned_lock_free</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_ref</span></span> </td>
<td> <a href="atomic/atomic_ref.html" title="cpp/atomic/atomic ref"><tt>std::atomic_ref</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_shared_ptr</span></span> </td>
<td> <a href="memory/shared_ptr/atomic2.html" title="cpp/memory/shared ptr/atomic2"><tt>std::atomic&lt;std::shared_ptr&gt;</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">value_initialization</span></span> </td>
<td> Fixing atomic initialization (value-initialize <span class="t-lc"><a href="atomic/atomic.html" title="cpp/atomic/atomic">std::atomic</a></span> by default) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_atomic_wait</span></span> </td>
<td> Efficient <span class="t-lc"><a href="atomic/atomic.html" title="cpp/atomic/atomic">std::atomic</a></span> waiting </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_barrier</span></span> </td>
<td> <a href="thread/barrier.html" title="cpp/thread/barrier"><tt>std::barrier</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/barrier.html" title="cpp/header/barrier"><tt>&lt;barrier&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bind_back</span></span> </td>
<td> <span class="t-lc">std::bind_back</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bind_front</span></span> </td>
<td> <a href="utility/functional/bind_front.html" title="cpp/utility/functional/bind front"><tt>std::bind_front</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bit_cast</span></span> </td>
<td> <a href="numeric/bit_cast.html" title="cpp/numeric/bit cast"><tt>std::bit_cast</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/bit.html" title="cpp/header/bit"><tt>&lt;bit&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bitops</span></span> </td>
<td> <a href="numeric.html#Bit_manipulation_.28since_C.2B.2B20.29" title="cpp/numeric">Bit operations</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/bit.html" title="cpp/header/bit"><tt>&lt;bit&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bool_constant</span></span> </td>
<td> <span class="t-lc"><a href="types/integral_constant.html" title="cpp/types/integral constant">std::bool_constant</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201505L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_bounded_array_traits</span></span> </td>
<td> <a href="types/is_bounded_array.html" title="cpp/types/is bounded array"><tt>std::is_bounded_array</tt></a>, <a href="types/is_unbounded_array.html" title="cpp/types/is unbounded array"><tt>std::is_unbounded_array</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_boyer_moore_searcher</span></span> </td>
<td> <a href="utility/functional.html#Searchers" title="cpp/utility/functional">Searchers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_byte</span></span> </td>
<td> <a href="types/byte.html" title="cpp/types/byte"><tt>std::byte</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/cstddef.html" title="cpp/header/cstddef"><tt>&lt;cstddef&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_byteswap</span></span> </td>
<td> <a href="numeric/byteswap.html" title="cpp/numeric/byteswap"><tt>std::byteswap</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/bit.html" title="cpp/header/bit"><tt>&lt;bit&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_char8_t</span></span> </td>
<td> Library support for <a href="language/types.html#char8_t" title="cpp/language/types"><tt>char8_t</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/atomic.html" title="cpp/header/atomic"><tt>&lt;atomic&gt;</tt></a> <a href="header/filesystem.html" title="cpp/header/filesystem"><tt>&lt;filesystem&gt;</tt></a> <a href="header/istream.html" title="cpp/header/istream"><tt>&lt;istream&gt;</tt></a> <a href="header/limits.html" title="cpp/header/limits"><tt>&lt;limits&gt;</tt></a> <a href="header/locale.html" title="cpp/header/locale"><tt>&lt;locale&gt;</tt></a> <a href="header/ostream.html" title="cpp/header/ostream"><tt>&lt;ostream&gt;</tt></a> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/string_view.html" title="cpp/header/string view"><tt>&lt;string_view&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="3"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_chrono</span></span> </td>
<td> Rounding functions for <span class="t-lc"><a href="chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> and <span class="t-lc"><a href="chrono/time_point.html" title="cpp/chrono/time point">std::chrono::time_point</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span> </td>
<td> <a href="header/chrono.html" title="cpp/header/chrono"><tt>&lt;chrono&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> Constexpr for all the member functions of <span class="t-lc"><a href="chrono/duration.html" title="cpp/chrono/duration">std::chrono::duration</a></span> and <span class="t-lc"><a href="chrono/time_point.html" title="cpp/chrono/time point">std::chrono::time_point</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span> </td>
<td> <a href="header/chrono.html" title="cpp/header/chrono"><tt>&lt;chrono&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <a href="chrono.html#Calendar" title="cpp/chrono">Calendars</a> and <a href="chrono.html#Time_zone" title="cpp/chrono">Time Zones</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/chrono.html" title="cpp/header/chrono"><tt>&lt;chrono&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_chrono_udls</span></span> </td>
<td> <a href="chrono/duration.html#Literals" title="cpp/chrono/duration">User-defined literals for time types</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/chrono.html" title="cpp/header/chrono"><tt>&lt;chrono&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_clamp</span></span> </td>
<td> <span class="t-lc"><a href="algorithm/clamp.html" title="cpp/algorithm/clamp">std::clamp</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_complex_udls</span></span> </td>
<td> <a href="numeric/complex/operator_q__q_i.html" title='cpp/numeric/complex/operator""i'>User-defined Literals for <code>std::complex</code></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span> </td>
<td> <a href="header/complex.html" title="cpp/header/complex"><tt>&lt;complex&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_concepts</span></span> </td>
<td> <a href="concepts.html" title="cpp/concepts">Standard library concepts</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <a href="header/concepts.html" title="cpp/header/concepts"><tt>&lt;concepts&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_algorithms</span></span> </td>
<td> Constexpr for <a href="algorithm.html" title="cpp/algorithm">algorithms</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_cmath</span></span> </td>
<td> Constexpr for mathematical functions in <a href="header/cmath.html" title="cpp/header/cmath"><tt>&lt;cmath&gt;</tt></a> and <a href="header/cstdlib.html" title="cpp/header/cstdlib"><tt>&lt;cstdlib&gt;</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/cmath.html" title="cpp/header/cmath"><tt>&lt;cmath&gt;</tt></a> <a href="header/cstdlib.html" title="cpp/header/cstdlib"><tt>&lt;cstdlib&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_complex</span></span> </td>
<td> Constexpr for <span class="t-lc"><a href="numeric/complex.html" title="cpp/numeric/complex">std::complex</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <a href="header/complex.html" title="cpp/header/complex"><tt>&lt;complex&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">dynamic_alloc</span></span> </td>
<td> Constexpr for <span class="t-lc"><a href="memory/allocator.html" title="cpp/memory/allocator">std::allocator</a></span> and related utilities </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_functional</span></span> </td>
<td> Misc constexpr bits (<span class="t-lc"><a href="utility/functional/default_searcher.html" title="cpp/utility/functional/default searcher">std::default_searcher</a></span>); constexpr <code>INVOKE</code> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_iterator</span></span> </td>
<td> Misc constexpr bits (<span class="t-lc"><a href="iterator/insert_iterator.html" title="cpp/iterator/insert iterator">std::insert_iterator</a></span> et al.) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_memory</span></span> </td>
<td> Constexpr in <span class="t-lc"><a href="memory/pointer_traits.html" title="cpp/memory/pointer traits">std::pointer_traits</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> Constexpr <span class="t-lc"><a href="memory/unique_ptr.html" title="cpp/memory/unique ptr">std::unique_ptr</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_numeric</span></span> </td>
<td> Constexpr for <a href="algorithm.html#Numeric_operations" title="cpp/algorithm">algorithms</a> in <a href="header/numeric.html" title="cpp/header/numeric"><tt>&lt;numeric&gt;</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span> </td>
<td> <a href="header/numeric.html" title="cpp/header/numeric"><tt>&lt;numeric&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_string</span></span> </td>
<td> Constexpr for <span class="t-lc"><a href="string/basic_string.html" title="cpp/string/basic string">std::string</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">string_view</span></span> </td>
<td> Misc constexpr bits (<span class="t-lc"><a href="string/basic_string_view/copy.html" title="cpp/string/basic string view/copy">std::string_view::copy</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/string_view.html" title="cpp/header/string view"><tt>&lt;string_view&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_tuple</span></span> </td>
<td> Misc constexpr bits (<span class="t-lc"><a href="utility/tuple/operator%3D.html" title="cpp/utility/tuple/operator=">std::tuple::operator=</a></span> et al.) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/tuple.html" title="cpp/header/tuple"><tt>&lt;tuple&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_typeinfo</span></span> </td>
<td> Constexpr for <span class="t-lc"><a href="types/type_info/operator_cmp.html" title="cpp/types/type info/operator cmp">std::type_info::operator==</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/typeinfo.html" title="cpp/header/typeinfo"><tt>&lt;typeinfo&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_utility</span></span> </td>
<td> Misc constexpr bits (<span class="t-lc"><a href="utility/pair/operator%3D.html" title="cpp/utility/pair/operator=">std::pair::operator=</a></span> et al.) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_constexpr_vector</span></span> </td>
<td> Constexpr for <span class="t-lc"><a href="container/vector.html" title="cpp/container/vector">std::vector</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/vector.html" title="cpp/header/vector"><tt>&lt;vector&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_containers_ranges</span></span> </td>
<td> Ranges construction and insertion for containers </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/vector.html" title="cpp/header/vector"><tt>&lt;vector&gt;</tt></a> <a href="header/list.html" title="cpp/header/list"><tt>&lt;list&gt;</tt></a> <a href="header/forward_list.html" title="cpp/header/forward list"><tt>&lt;forward_list&gt;</tt></a> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> <a href="header/deque.html" title="cpp/header/deque"><tt>&lt;deque&gt;</tt></a> <a href="header/queue.html" title="cpp/header/queue"><tt>&lt;queue&gt;</tt></a> <a href="header/stack.html" title="cpp/header/stack"><tt>&lt;stack&gt;</tt></a> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_coroutine</span></span> </td>
<td> <a href="language/coroutines.html" title="cpp/language/coroutines">Coroutines</a> (library support) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <a href="header/coroutine.html" title="cpp/header/coroutine"><tt>&lt;coroutine&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_destroying_delete</span></span> </td>
<td> <a href="memory/new/operator_delete.html" title="cpp/memory/new/operator delete">Destroying <code>operator delete</code></a> (library support) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/new.html" title="cpp/header/new"><tt>&lt;new&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_enable_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">shared_from_this</span></span> </td>
<td> More precise specification of <span class="t-lc"><a href="memory/enable_shared_from_this.html" title="cpp/memory/enable shared from this">std::enable_shared_from_this</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_endian</span></span> </td>
<td> <span class="t-lc">std::endian</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/bit.html" title="cpp/header/bit"><tt>&lt;bit&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_erase_if</span></span> </td>
<td> Uniform container erasure </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/deque.html" title="cpp/header/deque"><tt>&lt;deque&gt;</tt></a> <a href="header/forward_list.html" title="cpp/header/forward list"><tt>&lt;forward_list&gt;</tt></a> <a href="header/list.html" title="cpp/header/list"><tt>&lt;list&gt;</tt></a> <a href="header/vector.html" title="cpp/header/vector"><tt>&lt;vector&gt;</tt></a> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_exchange_function</span></span> </td>
<td> <span class="t-lc"><a href="utility/exchange.html" title="cpp/utility/exchange">std::exchange</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_execution</span></span> </td>
<td> <a href="algorithm.html#Execution_policies" title="cpp/algorithm">Execution policies</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/execution.html" title="cpp/header/execution"><tt>&lt;execution&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <a href="algorithm/execution_policy_tag_t.html" title="cpp/algorithm/execution policy tag t"><tt>std::execution::unsequenced_policy</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <a href="header/execution.html" title="cpp/header/execution"><tt>&lt;execution&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_expected</span></span> </td>
<td> class template <span class="t-lc">std::expected</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/expected.html" title="cpp/header/expected"><tt>&lt;expected&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_filesystem</span></span> </td>
<td> <a href="filesystem.html" title="cpp/filesystem">Filesystem library</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span> </td>
<td> <a href="header/filesystem.html" title="cpp/header/filesystem"><tt>&lt;filesystem&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td rowspan="3"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_format</span></span> </td>
<td> <a href="utility/format.html" title="cpp/utility/format">Text formatting</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/format.html" title="cpp/header/format"><tt>&lt;format&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> Compile-time format string checks; Reducing parameterization of <span class="t-lc"><a href="utility/format/vformat_to.html" title="cpp/utility/format/vformat to">std::vformat_to</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/format.html" title="cpp/header/format"><tt>&lt;format&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> Fixing locale handling in chrono formatters; Supporting non-const-formattable types </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/format.html" title="cpp/header/format"><tt>&lt;format&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_gcd_lcm</span></span> </td>
<td> <span class="t-lc"><a href="numeric/gcd.html" title="cpp/numeric/gcd">std::gcd</a></span>, <span class="t-lc"><a href="numeric/lcm.html" title="cpp/numeric/lcm">std::lcm</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/numeric.html" title="cpp/header/numeric"><tt>&lt;numeric&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_generic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">associative_lookup</span></span> </td>
<td> Heterogeneous comparison lookup in <a href="container.html#Associative_containers" title="cpp/container">associative containers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_generic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">unordered_lookup</span></span> </td>
<td> Heterogeneous comparison lookup in <a href="container.html#Unordered_associative_containers" title="cpp/container">unordered associative containers</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_hardware_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">interference_size</span></span> </td>
<td> <a href="thread/hardware_destructive_interference_size.html" title="cpp/thread/hardware destructive interference size"><tt>constexpr std::hardware_{constructive, destructive}_interference_size</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span> </td>
<td> <a href="header/new.html" title="cpp/header/new"><tt>&lt;new&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_has_unique_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">object_representations</span></span> </td>
<td> <span class="t-lc"><a href="types/has_unique_object_representations.html" title="cpp/types/has unique object representations">std::has_unique_object_representations</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_hypot</span></span> </td>
<td> 3-argument overload of <span class="t-lc"><a href="numeric/math/hypot.html" title="cpp/numeric/math/hypot">std::hypot</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/cmath.html" title="cpp/header/cmath"><tt>&lt;cmath&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_incomplete_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">container_elements</span></span> </td>
<td> Minimal incomplete type support for <a href="container/forward_list.html#Template_parameters" title="cpp/container/forward list">std::forward_list</a>, <a href="container/list.html#Template_parameters" title="cpp/container/list">std::list</a>, and <a href="container/vector.html#Template_parameters" title="cpp/container/vector">std::vector</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201505L</span></span></span> </td>
<td> <a href="header/forward_list.html" title="cpp/header/forward list"><tt>&lt;forward_list&gt;</tt></a> <a href="header/list.html" title="cpp/header/list"><tt>&lt;list&gt;</tt></a> <a href="header/vector.html" title="cpp/header/vector"><tt>&lt;vector&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_int_pow2</span></span> </td>
<td> <a href="numeric.html#Bit_manipulation_.28since_C.2B.2B20.29" title="cpp/numeric">Integral power-of-2 operations</a> (<span class="t-lc">std::has_single_bit</span>, <span class="t-lc">std::bit_ceil</span>, <span class="t-lc">std::bit_floor</span>, <span class="t-lc">std::bit_width</span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <a href="header/bit.html" title="cpp/header/bit"><tt>&lt;bit&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_integer_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">comparison_functions</span></span> </td>
<td> <a href="utility.html#Integer_comparison_functions" title="cpp/utility">Integer comparison functions</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_integer_sequence</span></span> </td>
<td> <a href="utility/integer_sequence.html" title="cpp/utility/integer sequence">Compile-time integer sequences</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_integral_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">constant_callable</span></span> </td>
<td> <span class="t-lc"><a href="types/integral_constant.html" title="cpp/types/integral constant">std::integral_constant::operator()</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_interpolate</span></span> </td>
<td> <a href="numeric/lerp.html" title="cpp/numeric/lerp"><tt>std::lerp</tt></a>, <a href="numeric/midpoint.html" title="cpp/numeric/midpoint"><tt>std::midpoint</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <a href="header/cmath.html" title="cpp/header/cmath"><tt>&lt;cmath&gt;</tt></a> <a href="header/numeric.html" title="cpp/header/numeric"><tt>&lt;numeric&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_invoke</span></span> </td>
<td> <span class="t-lc"><a href="utility/functional/invoke.html" title="cpp/utility/functional/invoke">std::invoke</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_invoke_r</span></span> </td>
<td> <a href="utility/functional/invoke.html" title="cpp/utility/functional/invoke"><tt>std::invoke_r</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_aggregate</span></span> </td>
<td> <a href="types/is_aggregate.html" title="cpp/types/is aggregate"><tt>std::is_aggregate</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_constant_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">evaluated</span></span> </td>
<td> <a href="types/is_constant_evaluated.html" title="cpp/types/is constant evaluated"><tt>std::is_constant_evaluated</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_final</span></span> </td>
<td> <span class="t-lc"><a href="types/is_final.html" title="cpp/types/is final">std::is_final</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_invocable</span></span> </td>
<td> <span class="t-lc">std::is_invocable</span>, <span class="t-lc"><a href="types/result_of.html" title="cpp/types/result of">std::invoke_result</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_layout_compatible</span></span> </td>
<td> <a href="types/is_layout_compatible.html" title="cpp/types/is layout compatible"><tt>std::is_layout_compatible</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_nothrow_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">convertible</span></span> </td>
<td> <a href="types/is_convertible.html" title="cpp/types/is convertible"><tt>std::is_nothrow_convertible</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_null_pointer</span></span> </td>
<td> <span class="t-lc"><a href="types/is_null_pointer.html" title="cpp/types/is null pointer">std::is_null_pointer</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201309L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_pointer_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">interconvertible</span></span> </td>
<td> Pointer-interconvertibility traits: <a href="types/is_pointer_interconvertible_with_class.html" title="cpp/types/is pointer interconvertible with class"><tt>std::is_pointer_interconvertible_with_class</tt></a>, <a href="types/is_pointer_interconvertible_base_of.html" title="cpp/types/is pointer interconvertible base of"><tt>std::is_pointer_interconvertible_base_of</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_scoped_enum</span></span> </td>
<td> <a href="types/is_scoped_enum.html" title="cpp/types/is scoped enum"><tt>std::is_scoped_enum</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_is_swappable</span></span> </td>
<td> <a href="types/is_swappable.html" title="cpp/types/is swappable">[<code>nothrow</code>-]swappable traits</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_jthread</span></span> </td>
<td> <a href="thread/stop_token.html" title="cpp/thread/stop token">Stop token</a> and <a href="thread/jthread.html" title="cpp/thread/jthread">joining thread</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span> </td>
<td> <a href="header/stop_token.html" title="cpp/header/stop token"><tt>&lt;stop_token&gt;</tt></a> <a href="header/thread.html" title="cpp/header/thread"><tt>&lt;thread&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_latch</span></span> </td>
<td> <a href="thread/latch.html" title="cpp/thread/latch"><tt>std::latch</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/latch.html" title="cpp/header/latch"><tt>&lt;latch&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_launder</span></span> </td>
<td> Core Issue 1776: Replacement of class objects containing reference members (<span class="t-lc"><a href="utility/launder.html" title="cpp/utility/launder">std::launder</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/new.html" title="cpp/header/new"><tt>&lt;new&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_list_remove_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">return_type</span></span> </td>
<td> Change the return type of the <span class="t-lc"><a href="container/list/remove.html" title="cpp/container/list/remove">remove()</a></span>, <span class="t-lc"><a href="container/list/remove.html" title="cpp/container/list/remove">remove_if()</a></span> and <span class="t-lc"><a href="container/list/unique.html" title="cpp/container/list/unique">unique()</a></span> members of <span class="t-lc"><a href="container/forward_list.html" title="cpp/container/forward list">std::forward_list</a></span> and <span class="t-lc"><a href="container/list.html" title="cpp/container/list">std::list</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/forward_list.html" title="cpp/header/forward list"><tt>&lt;forward_list&gt;</tt></a> <a href="header/list.html" title="cpp/header/list"><tt>&lt;list&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_logical_traits</span></span> </td>
<td> <a href="types.html#Operations_on_traits" title="cpp/types">Logical operator type traits</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_make_from_tuple</span></span> </td>
<td> <span class="t-lc"><a href="utility/make_from_tuple.html" title="cpp/utility/make from tuple">std::make_from_tuple()</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/tuple.html" title="cpp/header/tuple"><tt>&lt;tuple&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_make_reverse_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">iterator</span></span> </td>
<td> <a href="iterator/make_reverse_iterator.html" title="cpp/iterator/make reverse iterator"><tt>std::make_reverse_iterator</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_make_unique</span></span> </td>
<td> <span class="t-lc"><a href="memory/unique_ptr/make_unique.html" title="cpp/memory/unique ptr/make unique">std::make_unique</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_map_try_emplace</span></span> </td>
<td> <span class="t-lc"><a href="container/map/try_emplace.html" title="cpp/container/map/try emplace">std::map::try_emplace</a></span>, <span class="t-lc"><a href="container/map/insert_or_assign.html" title="cpp/container/map/insert or assign">std::map::insert_or_assign</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_math_constants</span></span> </td>
<td> <a href="header/numbers.html" title="cpp/header/numbers">Mathematical constants</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/numbers.html" title="cpp/header/numbers"><tt>&lt;numbers&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_math_special_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">functions</span></span> </td>
<td> <a href="numeric/special_functions.html" title="cpp/numeric/special functions">Mathematical special functions for C++17</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/cmath.html" title="cpp/header/cmath"><tt>&lt;cmath&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_memory_resource</span></span> </td>
<td> <span class="t-lc"><a href="memory/memory_resource.html" title="cpp/memory/memory resource">std::pmr::memory_resource</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/memory_resource.html" title="cpp/header/memory resource"><tt>&lt;memory_resource&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_move_only_function</span></span> </td>
<td> <span class="t-lc">std::move_only_function</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_node_extract</span></span> </td>
<td> Splicing maps and sets (<span class="t-lc"><a href="container/map/extract.html" title="cpp/container/map/extract">std::map::extract</a></span>, <span class="t-lc"><a href="container/map/merge.html" title="cpp/container/map/merge">std::map::merge</a></span>, <a href="container/map/insert.html" title="cpp/container/map/insert"><tt>std::map::insert(node_type)</tt></a>, etc) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_nonmember_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">container_access</span></span> </td>
<td> <span class="t-lc"><a href="iterator/size.html" title="cpp/iterator/size">std::size()</a></span>, <span class="t-lc"><a href="iterator/data.html" title="cpp/iterator/data">std::data()</a></span> and <span class="t-lc"><a href="iterator/empty.html" title="cpp/iterator/empty">std::empty()</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> <a href="header/array.html" title="cpp/header/array"><tt>&lt;array&gt;</tt></a> <a href="header/deque.html" title="cpp/header/deque"><tt>&lt;deque&gt;</tt></a> <a href="header/forward_list.html" title="cpp/header/forward list"><tt>&lt;forward_list&gt;</tt></a> <a href="header/list.html" title="cpp/header/list"><tt>&lt;list&gt;</tt></a> <a href="header/map.html" title="cpp/header/map"><tt>&lt;map&gt;</tt></a> <a href="header/regex.html" title="cpp/header/regex"><tt>&lt;regex&gt;</tt></a> <a href="header/set.html" title="cpp/header/set"><tt>&lt;set&gt;</tt></a> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> <a href="header/unordered_set.html" title="cpp/header/unordered set"><tt>&lt;unordered_set&gt;</tt></a> <a href="header/vector.html" title="cpp/header/vector"><tt>&lt;vector&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_not_fn</span></span> </td>
<td> <span class="t-lc"><a href="utility/functional/not_fn.html" title="cpp/utility/functional/not fn">std::not_fn()</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_null_iterators</span></span> </td>
<td> Null <a href="named_req/ForwardIterator.html" title="cpp/named req/ForwardIterator"><span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">LegacyForwardIterator</span>s</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="3"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_optional</span></span> </td>
<td> <span class="t-lc"><a href="utility/optional.html" title="cpp/utility/optional">std::optional</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/optional.html" title="cpp/header/optional"><tt>&lt;optional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> Fully <code>constexpr</code> <span class="t-lc"><a href="utility/optional.html" title="cpp/utility/optional">std::optional</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/optional.html" title="cpp/header/optional"><tt>&lt;optional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> <a href="utility/optional.html#Monadic_operations" title="cpp/utility/optional">Monadic operations</a> in <span class="t-lc"><a href="utility/optional.html" title="cpp/utility/optional">std::optional</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/optional.html" title="cpp/header/optional"><tt>&lt;optional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_out_ptr</span></span> </td>
<td> <span class="t-lc">std::out_ptr</span>, <span class="t-lc">std::inout_ptr</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_parallel_algorithm</span></span> </td>
<td> <a href="algorithm.html#Execution_policies" title="cpp/algorithm">Parallel algorithms</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> <a href="header/numeric.html" title="cpp/header/numeric"><tt>&lt;numeric&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_polymorphic_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">allocator</span></span> </td>
<td> <span class="t-lc"><a href="memory/polymorphic_allocator.html" title="cpp/memory/polymorphic allocator">std::pmr::polymorphic_allocator&lt;&gt;</a></span> as a vocabulary type </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <a href="header/memory_resource.html" title="cpp/header/memory resource"><tt>&lt;memory_resource&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_quoted_string_io</span></span> </td>
<td> <span class="t-lc"><a href="io/manip/quoted.html" title="cpp/io/manip/quoted">std::quoted</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/iomanip.html" title="cpp/header/iomanip"><tt>&lt;iomanip&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="4"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges</span></span> </td>
<td> <a href="ranges.html" title="cpp/ranges">Ranges library</a> and <a href="algorithm/ranges.html" title="cpp/algorithm/ranges">constrained algorithms</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201911L</span></span></span> </td>
<td rowspan="4"> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> Non-<a href="concepts/default_initializable.html" title="cpp/concepts/default initializable">default-initializable</a> <a href="ranges/view.html" title="cpp/ranges/view">views</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> <a href="ranges/view.html" title="cpp/ranges/view">Views</a> with <a href="ranges/owning_view.html" title="cpp/ranges/owning view">ownership</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> <span class="t-lc">std::ranges::range_adaptor_closure</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_chunk</span></span> </td>
<td> <span class="t-lc">std::ranges::chunk_view</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_chunk_by</span></span> </td>
<td> <span class="t-lc">std::ranges::chunk_by_view</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_iota</span></span> </td>
<td> <span class="t-lc">std::ranges::iota</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/numeric.html" title="cpp/header/numeric"><tt>&lt;numeric&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_join_with</span></span> </td>
<td> <span class="t-lc">std::ranges::join_with_view</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_slide</span></span> </td>
<td> <span class="t-lc">std::ranges::slide_view</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">starts_ends_with</span></span> </td>
<td> <span class="t-lc">std::ranges::starts_with</span>, <span class="t-lc">std::ranges::ends_with</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_to_container</span></span> </td>
<td> <span class="t-lc">std::ranges::to</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ranges_zip</span></span> </td>
<td> <span class="t-lc">std::ranges::zip_view</span>, <span class="t-lc">std::ranges::zip_transform_view</span>, <span class="t-lc">std::ranges::adjacent_view</span>, <span class="t-lc">std::ranges::adjacent_transform_view</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/ranges.html" title="cpp/header/ranges"><tt>&lt;ranges&gt;</tt></a> <a href="header/tuple.html" title="cpp/header/tuple"><tt>&lt;tuple&gt;</tt></a> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_raw_memory_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">algorithms</span></span> </td>
<td> <a href="memory.html#Uninitialized_storage" title="cpp/memory">Extending memory management tools</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_reference_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">from_temporary</span></span> </td>
<td> <span class="t-lc">std::reference_constructs_from_temporary</span> and <span class="t-lc">std::reference_converts_from_temporary</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_remove_cvref</span></span> </td>
<td> <a href="types/remove_cvref.html" title="cpp/types/remove cvref"><tt>std::remove_cvref</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_result_of_sfinae</span></span> </td>
<td> <span class="t-lc"><a href="types/result_of.html" title="cpp/types/result of">std::result_of</a></span> and <a href="language/sfinae.html" title="cpp/language/sfinae">SFINAE</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201210L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_robust_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">nonmodifying_seq_ops</span></span> </td>
<td> Making non-modifying sequence operations more robust (two-range overloads for <span class="t-lc"><a href="algorithm/mismatch.html" title="cpp/algorithm/mismatch">std::mismatch</a></span>, <span class="t-lc"><a href="algorithm/equal.html" title="cpp/algorithm/equal">std::equal</a></span> and <span class="t-lc"><a href="algorithm/is_permutation.html" title="cpp/algorithm/is permutation">std::is_permutation</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_sample</span></span> </td>
<td> <span class="t-lc"><a href="algorithm/sample.html" title="cpp/algorithm/sample">std::sample</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201603L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_scoped_lock</span></span> </td>
<td> <a href="thread/scoped_lock.html" title="cpp/thread/scoped lock"><tt>std::scoped_lock</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201703L</span></span></span> </td>
<td> <a href="header/mutex.html" title="cpp/header/mutex"><tt>&lt;mutex&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_semaphore</span></span> </td>
<td> <a href="thread/counting_semaphore.html" title="cpp/thread/counting semaphore"><code>std::counting_semaphore</code>, <code>std::binary_semaphore</code></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/semaphore.html" title="cpp/header/semaphore"><tt>&lt;semaphore&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_mutex</span></span> </td>
<td> <span class="t-lc"><a href="thread/shared_mutex.html" title="cpp/thread/shared mutex">std::shared_mutex</a></span> (untimed) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201505L</span></span></span> </td>
<td> <a href="header/shared_mutex.html" title="cpp/header/shared mutex"><tt>&lt;shared_mutex&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_ptr_arrays</span></span> </td>
<td> <span class="t-lc"><a href="memory/shared_ptr.html" title="cpp/memory/shared ptr">std::shared_ptr&lt;T[]&gt;</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> Array support of <span class="t-lc"><a href="memory/shared_ptr/make_shared.html" title="cpp/memory/shared ptr/make shared">std::make_shared</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201707L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_ptr_weak_type</span></span> </td>
<td> <a href="memory/shared_ptr.html" title="cpp/memory/shared ptr"><tt>shared_ptr::weak_type</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shared_timed_mutex</span></span> </td>
<td> <span class="t-lc"><a href="thread/shared_timed_mutex.html" title="cpp/thread/shared timed mutex">std::shared_timed_mutex</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span> </td>
<td> <a href="header/shared_mutex.html" title="cpp/header/shared mutex"><tt>&lt;shared_mutex&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_shift</span></span> </td>
<td> <a href="algorithm/shift.html" title="cpp/algorithm/shift"><tt>std::shift_left</tt></a> and <a href="algorithm/shift.html" title="cpp/algorithm/shift"><tt>std::shift_right</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-lc">std::ranges::shift_left</span> and <span class="t-lc">std::ranges::shift_right</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/algorithm.html" title="cpp/header/algorithm"><tt>&lt;algorithm&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_smart_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">ptr_for_overwrite</span></span> </td>
<td> Smart pointer creation with default initialization (<span class="t-lc"><a href="memory/shared_ptr/allocate_shared.html" title="cpp/memory/shared ptr/allocate shared">std::allocate_shared_for_overwrite</a></span>, <span class="t-lc"><a href="memory/shared_ptr/make_shared.html" title="cpp/memory/shared ptr/make shared">std::make_shared_for_overwrite</a></span>, <span class="t-lc"><a href="memory/unique_ptr/make_unique.html" title="cpp/memory/unique ptr/make unique">std::make_unique_for_overwrite</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_source_location</span></span> </td>
<td> Source-code information capture (<span class="t-lc"><a href="utility/source_location.html" title="cpp/utility/source location">std::source_location</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/source_location.html" title="cpp/header/source location"><tt>&lt;source_location&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_span</span></span> </td>
<td> <a href="container/span.html" title="cpp/container/span"><tt>std::span</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202002L</span></span></span> </td>
<td> <a href="header/span.html" title="cpp/header/span"><tt>&lt;span&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_spanstream</span></span> </td>
<td> <a href="io/basic_spanbuf.html" title="cpp/io/basic spanbuf"><tt>std::spanbuf</tt></a>, <a href="io/basic_spanstream.html" title="cpp/io/basic spanstream"><tt>std::spanstream</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/spanstream.html" title="cpp/header/spanstream"><tt>&lt;spanstream&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_ssize</span></span> </td>
<td> <a href="iterator/size.html" title="cpp/iterator/size"><tt>std::ssize</tt></a> and unsigned <a href="container/span/size.html" title="cpp/container/span/size"><tt>std::span::size</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201902L</span></span></span> </td>
<td> <a href="header/iterator.html" title="cpp/header/iterator"><tt>&lt;iterator&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_stacktrace</span></span> </td>
<td> <a href="error.html#Stacktrace" title="cpp/error">Stacktrace library</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span> </td>
<td> <a href="header/stacktrace.html" title="cpp/header/stacktrace"><tt>&lt;stacktrace&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_starts_ends_with</span></span> </td>
<td> String prefix and suffix checking (<span class="t-lc">starts_with()</span> and <span class="t-lc">ends_with()</span> for <span class="t-lc"><a href="string/basic_string.html" title="cpp/string/basic string">std::string</a></span> and <span class="t-lc"><a href="string/basic_string_view.html" title="cpp/string/basic string view">std::string_view</a></span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/string_view.html" title="cpp/header/string view"><tt>&lt;string_view&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_stdatomic_h</span></span> </td>
<td> Compatibility header for C atomic operations </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span> </td>
<td> <a href="header/stdatomic.h.html" title="cpp/header/stdatomic.h"><tt>&lt;stdatomic.h&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_contains</span></span> </td>
<td> <code>contains</code> functions of <a href="string/basic_string/contains.html" title="cpp/string/basic string/contains"><tt>std::basic_string</tt></a> and <a href="string/basic_string_view/contains.html" title="cpp/string/basic string view/contains"><tt>std::basic_string_view</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202011L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/string_view.html" title="cpp/header/string view"><tt>&lt;string_view&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">resize_and_overwrite</span></span> </td>
<td> <span class="t-lc">std::basic_string::resize_and_overwrite</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202110L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_udls</span></span> </td>
<td> <a href="string/basic_string/operator_q__q_s.html" title='cpp/string/basic string/operator""s'>User-defined literals for string types</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_string_view</span></span> </td>
<td> <span class="t-lc"><a href="string/basic_string_view.html" title="cpp/string/basic string view">std::string_view</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/string_view.html" title="cpp/header/string view"><tt>&lt;string_view&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <a href="named_req/ConstexprIterator.html" title="cpp/named req/ConstexprIterator"><span style="font-family: Georgia, 'DejaVu Serif', serif; font-style:italic">ConstexprIterator</span></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span> </td>
<td> <a href="header/string.html" title="cpp/header/string"><tt>&lt;string&gt;</tt></a> <a href="header/string_view.html" title="cpp/header/string view"><tt>&lt;string_view&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_syncbuf</span></span> </td>
<td> Synchronized buffered ostream (<span class="t-lc">std::syncbuf</span>, <span class="t-lc">std::osyncstream</span>) and manipulators </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201803L</span></span></span> </td>
<td> <a href="header/syncstream.html" title="cpp/header/syncstream"><tt>&lt;syncstream&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_three_way_comparison</span></span> </td>
<td> <a href="language/operator_comparison.html#Three-way_comparison" title="cpp/language/operator comparison">Three-way comparison</a> (library support); adding three-way comparison to the library </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/compare.html" title="cpp/header/compare"><tt>&lt;compare&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_address</span></span> </td>
<td> Utility to convert a pointer to a raw pointer (<span class="t-lc">std::to_address</span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201711L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_array</span></span> </td>
<td> <a href="container/array/to_array.html" title="cpp/container/array/to array"><tt>std::to_array</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201907L</span></span></span> </td>
<td> <a href="header/array.html" title="cpp/header/array"><tt>&lt;array&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_chars</span></span> </td>
<td> Elementary string conversions (<span class="t-lc">std::to_chars</span>, <span class="t-lc">std::from_chars</span>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201611L</span></span></span> </td>
<td> <a href="header/charconv.html" title="cpp/header/charconv"><tt>&lt;charconv&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_to_underlying</span></span> </td>
<td> <a href="utility/to_underlying.html" title="cpp/utility/to underlying"><tt>std::to_underlying</tt></a>  </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202102L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_transformation_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">trait_aliases</span></span> </td>
<td> Alias templates for TransformationTraits </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td rowspan="2"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_transparent_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">operators</span></span> </td>
<td> Transparent operator functors (<span class="t-lc">std::less&lt;&gt;</span> et al) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201210L</span></span></span> </td>
<td> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> Transparent <span class="t-lc"><a href="memory/owner_less.html" title="cpp/memory/owner less">std::owner_less</a></span> (<a href="memory/owner_less_void.html" title="cpp/memory/owner less void"><tt>std::owner_less&lt;void&gt;</tt></a>) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span> </td>
<td> <a href="header/memory.html" title="cpp/header/memory"><tt>&lt;memory&gt;</tt></a> <a href="header/functional.html" title="cpp/header/functional"><tt>&lt;functional&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_tuple_element_t</span></span> </td>
<td> <a href="utility/tuple_element.html#Helper_types" title="cpp/utility/tuple element"><tt>std::tuple_element_t</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201402L</span></span></span> </td>
<td> <a href="header/tuple.html" title="cpp/header/tuple"><tt>&lt;tuple&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_tuples_by_type</span></span> </td>
<td> <a href="utility/tuple/get.html" title="cpp/utility/tuple/get">Addressing tuples by type</a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201304L</span></span></span> </td>
<td> <a href="header/tuple.html" title="cpp/header/tuple"><tt>&lt;tuple&gt;</tt></a> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx14">(C++14)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_type_identity</span></span> </td>
<td> <span class="t-lc">std::type_identity</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201806L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_type_trait_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">variable_templates</span></span> </td>
<td> Type traits variable templates (<span class="t-lc"><a href="types/is_void.html" title="cpp/types/is void">std::is_void_v</a></span>, etc) </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201510L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_uncaught_exceptions</span></span> </td>
<td> <a href="error/exception/uncaught_exception.html" title="cpp/error/uncaught exception"><tt>std::uncaught_exceptions</tt></a> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/exception.html" title="cpp/header/exception"><tt>&lt;exception&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_unordered_</span></span><span class="t-c"><span class="mw-geshi cpp source-cpp">map_try_emplace</span></span> </td>
<td> <span class="t-lc"><a href="container/unordered_map/try_emplace.html" title="cpp/container/unordered map/try emplace">std::unordered_map::try_emplace</a></span>, <span class="t-lc"><a href="container/unordered_map/insert_or_assign.html" title="cpp/container/unordered map/insert or assign">std::unordered_map::insert_or_assign</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/unordered_map.html" title="cpp/header/unordered map"><tt>&lt;unordered_map&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_unreachable</span></span> </td>
<td> <span class="t-lc">std::unreachable</span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202202L</span></span></span> </td>
<td> <a href="header/utility.html" title="cpp/header/utility"><tt>&lt;utility&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx23">(C++23)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_unwrap_ref</span></span> </td>
<td> <span class="t-lc"><a href="utility/functional/unwrap_reference.html" title="cpp/utility/functional/unwrap reference">std::unwrap_ref_decay</a></span> and <span class="t-lc"><a href="utility/functional/unwrap_reference.html" title="cpp/utility/functional/unwrap reference">std::unwrap_reference</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201811L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td></tr>
<tr>
<td rowspan="3"> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_variant</span></span> </td>
<td> <span class="t-lc"><a href="utility/variant.html" title="cpp/utility/variant">std::variant</a></span>: a type-safe union for C++17 </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201606L</span></span></span> </td>
<td> <a href="header/variant.html" title="cpp/header/variant"><tt>&lt;variant&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr>
<tr>
<td> <span class="t-lc"><a href="utility/variant/visit.html" title="cpp/utility/variant/visit">std::visit</a></span> for classes derived from <span class="t-lc"><a href="utility/variant.html" title="cpp/utility/variant">std::variant</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202102L</span></span></span> </td>
<td> <a href="header/variant.html" title="cpp/header/variant"><tt>&lt;variant&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> Fully <code>constexpr</code> <span class="t-lc"><a href="utility/variant.html" title="cpp/utility/variant">std::variant</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">202106L</span></span></span> </td>
<td> <a href="header/variant.html" title="cpp/header/variant"><tt>&lt;variant&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx20">(C++20)</span><span class="t-mark">(DR)</span>
</td></tr>
<tr>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp">__cpp_lib_void_t</span></span> </td>
<td> <span class="t-lc"><a href="types/void_t.html" title="cpp/types/void t">std::void_t</a></span> </td>
<td> <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="nu0">201411L</span></span></span> </td>
<td> <a href="header/type_traits.html" title="cpp/header/type traits"><tt>&lt;type_traits&gt;</tt></a> </td>
<td> <span class="t-mark-rev t-since-cxx17">(C++17)</span>
</td></tr></table>
<h3><span class="mw-headline" id="Example">Example</span></h3>
<h4><span class="mw-headline" id="Normal_usage">Normal usage</span></h4>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co2">#ifdef __has_include                           // Check if __has_include is present</span>
<span class="co2">#  if __has_include(&lt;optional&gt;)                // Check for a standard library</span>
<span class="co2">#    include &lt;optional&gt;</span>
<span class="co2">#  elif __has_include(&lt;experimental/optional&gt;) // Check for an experimental version</span>
<span class="co2">#    include &lt;experimental/optional&gt;</span>
<span class="co2">#  elif __has_include(&lt;boost/optional.hpp&gt;)    // Try with an external library</span>
<span class="co2">#    include &lt;boost/optional.hpp&gt;</span>
<span class="co2">#  else                                        // Not found at all</span>
<span class="co2">#     error "Missing &lt;optional&gt;"</span>
<span class="co2">#  endif</span>
<span class="co2">#endif</span>
 
<span class="co2">#ifdef __has_cpp_attribute                      // Check if __has_cpp_attribute is present</span>
<span class="co2">#  if __has_cpp_attribute(deprecated)           // Check for an attribute</span>
<span class="co2">#    define DEPRECATED(msg) [[deprecated(msg)]]</span>
<span class="co2">#  endif</span>
<span class="co2">#endif</span>
<span class="co2">#ifndef DEPRECATED</span>
<span class="co2">#    define DEPRECATED(msg)</span>
<span class="co2">#endif</span>
 
DEPRECATED<span class="br0">(</span><span class="st0">"foo() has been deprecated"</span><span class="br0">)</span> <span class="kw4">void</span> foo<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
 
<span class="co2">#if __cpp_constexpr &gt;= 201304                   // Check for a specific version of a feature</span>
<span class="co2">#  define CONSTEXPR constexpr</span>
<span class="co2">#else</span>
<span class="co2">#  define CONSTEXPR inline</span>
<span class="co2">#endif</span>
 
CONSTEXPR <span class="kw4">int</span> bar<span class="br0">(</span><span class="kw4">unsigned</span> i<span class="br0">)</span>
<span class="br0">{</span>
<span class="co2">#if __cpp_binary_literals                    // Check for the presence of a feature</span>
    <span class="kw4">unsigned</span> mask1 <span class="sy1">=</span> <span class="nu6">0b11000000</span><span class="sy4">;</span>
    <span class="kw4">unsigned</span> mask2 <span class="sy1">=</span> <span class="nu6">0b00000111</span><span class="sy4">;</span>
<span class="co2">#else</span>
    <span class="kw4">unsigned</span> mask1 <span class="sy1">=</span> <span class="nu12">0xC0</span><span class="sy4">;</span>
    <span class="kw4">unsigned</span> mask2 <span class="sy1">=</span> <span class="nu12">0x07</span><span class="sy4">;</span>
<span class="co2">#endif</span>
    <span class="kw1">if</span> <span class="br0">(</span> i <span class="sy3">&amp;</span> mask1 <span class="br0">)</span>
        <span class="kw1">return</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span> i <span class="sy3">&amp;</span> mask2 <span class="br0">)</span>
        <span class="kw1">return</span> <span class="nu0">2</span><span class="sy4">;</span>
    <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="br0">}</span></pre></div></div>
</div>
<h4><span class="mw-headline" id="Compiler_Features_Dump">Compiler Features Dump</span></h4>
<div class="t-template-editlink" style="">
</div>
<div class="t-example"><p>The following program dumps C++ compiler features and attributes.</p><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="cpp source-cpp"><pre class="de1"><span class="co1">// Change these options to print out only necessary info.</span>
<span class="kw4">static</span> <span class="kw1">struct</span> PrintOptions <span class="br0">{</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> titles               <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> counters             <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> attributes           <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> general_features     <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> core_features        <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> lib_features         <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> supported_features   <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> unsupported_features <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> sort_by_date         <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> separate_year_month  <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx11                <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx14                <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx17                <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx20                <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx23                <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">bool</span> cxx26                <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span>
<span class="br0">}</span>   print<span class="sy4">;</span>
 
<span class="co2">#if __cplusplus &lt; 201100</span>
<span class="co2">#  error "C++11 or better is required"</span>
<span class="co2">#endif</span>
 
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="co2">#include &lt;cstring&gt;</span>
<span class="co2">#include &lt;iomanip&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
 
<span class="co2">#ifdef __has_include</span>
<span class="co2"># if __has_include(&lt;version&gt;)</span>
<span class="co2">#   include &lt;version&gt;</span>
<span class="co2"># endif</span>
<span class="co2">#endif</span>
 
<span class="co2">#define COMPILER_FEATURE_VALUE(value) #value</span>
<span class="co2">#define COMPILER_FEATURE_ENTRY(name) { #name, COMPILER_FEATURE_VALUE(name) },</span>
 
<span class="co2">#ifdef __has_cpp_attribute</span>
<span class="co2"># define COMPILER_ATTRIBUTE_VALUE_AS_STRING(s) #s</span>
<span class="co2"># define COMPILER_ATTRIBUTE_AS_NUMBER(x) COMPILER_ATTRIBUTE_VALUE_AS_STRING(x)</span>
<span class="co2"># define COMPILER_ATTRIBUTE_ENTRY(attr) \
  { #attr, COMPILER_ATTRIBUTE_AS_NUMBER(__has_cpp_attribute(attr)) },</span>
<span class="co2">#else</span>
<span class="co2"># define COMPILER_ATTRIBUTE_ENTRY(attr) { #attr, "_" },</span>
<span class="co2">#endif</span>
 
<span class="kw1">struct</span> CompilerFeature <span class="br0">{</span>
    CompilerFeature<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> name <span class="sy1">=</span> nullptr, <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> value <span class="sy1">=</span> nullptr<span class="br0">)</span>
        <span class="sy4">:</span> name<span class="br0">(</span>name<span class="br0">)</span>, value<span class="br0">(</span>value<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
    <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> name<span class="sy4">;</span> <span class="kw4">const</span> <span class="kw4">char</span><span class="sy2">*</span> value<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">static</span> CompilerFeature cxx_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cplusplus<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_exceptions<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_rtti<span class="br0">)</span>
<span class="co2">#if 0</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUC__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUC_MINOR__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUC_PATCHLEVEL__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__GNUG__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang_major__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang_minor__<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__clang_patchlevel__<span class="br0">)</span>
<span class="co2">#endif</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx11_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_alias_templates<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_attributes<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_decltype<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_delegating_constructors<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_inheriting_constructors<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_initializer_lists<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lambdas<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nsdmi<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_range_based_for<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_raw_strings<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_ref_qualifiers<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_rvalue_references<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_static_assert<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_threadsafe_static_init<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_unicode_characters<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_unicode_literals<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_user_defined_literals<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_variadic_templates<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx14_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aggregate_nsdmi<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_binary_literals<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_decltype_auto<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_generic_lambdas<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_init_captures<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_return_type_deduction<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_sized_deallocation<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_variable_templates<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx14_lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_chrono_udls<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_complex_udls<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_exchange_function<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_generic_associative_lookup<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_integer_sequence<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_integral_constant_callable<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_final<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_null_pointer<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_make_reverse_iterator<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_make_unique<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_null_iterators<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_quoted_string_io<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_result_of_sfinae<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_robust_nonmodifying_seq_ops<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_timed_mutex<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_udls<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_transformation_trait_aliases<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_transparent_operators<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_tuple_element_t<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_tuples_by_type<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">static</span> CompilerFeature cxx17_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aggregate_bases<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aligned_new<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_capture_star_this<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_deduction_guides<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_enumerator_attributes<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_fold_expressions<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_guaranteed_copy_elision<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_hex_float<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_if_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_inheriting_constructors<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_inline_variables<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_namespace_attributes<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_noexcept_function_type<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nontype_template_args<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nontype_template_parameter_auto<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_range_based_for<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_static_assert<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_structured_bindings<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_template_template_args<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_variadic_using<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx17_lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_addressof_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_allocator_traits_is_always_equal<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_any<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_apply<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_array_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_as_const<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_is_always_lock_free<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bool_constant<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_boyer_moore_searcher<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_byte<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_chrono<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_clamp<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_enable_shared_from_this<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_execution<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_filesystem<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_gcd_lcm<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_hardware_interference_size<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_has_unique_object_representations<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_hypot<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_incomplete_container_elements<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_invoke<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_aggregate<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_invocable<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_swappable<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_launder<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_logical_traits<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_make_from_tuple<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_map_try_emplace<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_math_special_functions<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_memory_resource<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_node_extract<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_nonmember_container_access<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_not_fn<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_optional<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_parallel_algorithm<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_raw_memory_algorithms<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_sample<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_scoped_lock<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_mutex<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_ptr_arrays<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_ptr_weak_type<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_view<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_chars<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_transparent_operators<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_type_trait_variable_templates<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_uncaught_exceptions<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_unordered_map_try_emplace<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_variant<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_void_t<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">static</span> CompilerFeature cxx20_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_aggregate_paren_init<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_char8_t<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_concepts<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_conditional_explicit<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_consteval<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr_dynamic_alloc<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr_in_decltype<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constinit<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_deduction_guides<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_designated_initializers<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_generic_lambdas<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_impl_coroutine<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_impl_destroying_delete<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_impl_three_way_comparison<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_init_captures<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_modules<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_nontype_template_args<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_using_enum<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx20_lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_array_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_assume_aligned<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_flag_test<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_float<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_lock_free_type_aliases<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_ref<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_shared_ptr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_value_initialization<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_atomic_wait<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_barrier<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bind_front<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bit_cast<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bitops<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bounded_array_traits<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_char8_t<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_chrono<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_concepts<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_algorithms<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_complex<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_dynamic_alloc<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_functional<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_iterator<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_memory<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_numeric<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_string<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_string_view<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_tuple<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_utility<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_vector<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_coroutine<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_destroying_delete<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_endian<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_erase_if<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_execution<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_format<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_generic_unordered_lookup<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_int_pow2<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_integer_comparison_functions<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_interpolate<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_constant_evaluated<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_layout_compatible<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_nothrow_convertible<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_pointer_interconvertible<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_jthread<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_latch<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_list_remove_return_type<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_math_constants<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_polymorphic_allocator<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_remove_cvref<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_semaphore<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shared_ptr_arrays<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shift<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_smart_ptr_for_overwrite<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_source_location<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_span<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ssize<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_starts_ends_with<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_view<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_syncbuf<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_three_way_comparison<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_address<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_array<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_type_identity<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_unwrap_ref<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">static</span> CompilerFeature cxx23_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
<span class="co1">//&lt; Continue to Populate</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_char8_t<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_concepts<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_constexpr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_explicit_this_parameter<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_if_consteval<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_implicit_move<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_multidimensional_subscript<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_named_character_escapes<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_size_t_suffix<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_static_call_operator<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx23_lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
<span class="co1">//&lt; Continue to Populate</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_adaptor_iterator_pair_constructor<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_algorithm_iterator_requirements<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_allocate_at_least<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_associative_heterogeneous_erasure<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_bind_back<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_byteswap<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_concepts<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_bitset<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_charconv<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_cmath<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_memory<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_constexpr_typeinfo<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_containers_ranges<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_expected<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_find_last<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_flat_map<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_format<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_forward_like<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_generator<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_invoke_r<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ios_noreplace<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_is_scoped_enum<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_mdspan<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_move_iterator_concept<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_move_only_function<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_optional<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_out_ptr<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_print<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_as_const<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_as_rvalue<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_cartesian_product<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_chunk<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_chunk_by<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_contains<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_iota<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_join_with<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_repeat<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_slide<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_starts_ends_with<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_stride<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_to_container<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_ranges_zip<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_reference_from_temporary<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_shift<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_spanstream<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_stacktrace<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_start_lifetime_as<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_stdatomic_h<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_contains<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_string_resize_and_overwrite<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_to_underlying<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_tuple_like<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_unreachable<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_variant<span class="br0">)</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_fold<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">static</span> CompilerFeature cxx26_core<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
<span class="co1">//&lt; Populate</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_core_TODO<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">static</span> CompilerFeature cxx26_lib<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
<span class="co1">//&lt; Populate</span>
COMPILER_FEATURE_ENTRY<span class="br0">(</span>__cpp_lib_TODO<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">static</span> CompilerFeature attributes<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>assume<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>carries_dependency<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>deprecated<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>fallthrough<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>likely<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>maybe_unused<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>nodiscard<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>noreturn<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>no_unique_address<span class="br0">)</span>
COMPILER_ATTRIBUTE_ENTRY<span class="br0">(</span>unlikely<span class="br0">)</span>
<span class="br0">}</span><span class="sy4">;</span>
 
<span class="kw4">constexpr</span> <span class="kw4">bool</span> is_feature_supported<span class="br0">(</span><span class="kw4">const</span> CompilerFeature<span class="sy3">&amp;</span> x<span class="br0">)</span> <span class="br0">{</span>
    <span class="kw1">return</span> x.<span class="me1">value</span><span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">'_'</span> <span class="sy3">&amp;&amp;</span> x.<span class="me1">value</span><span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy3">!</span><span class="sy1">=</span> <span class="st0">'0'</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="kw1">inline</span> <span class="kw4">void</span> print_compiler_feature<span class="br0">(</span><span class="kw4">const</span> CompilerFeature<span class="sy3">&amp;</span> x<span class="br0">)</span> <span class="br0">{</span>
    <span class="kw4">constexpr</span> <span class="kw4">static</span> <span class="kw4">int</span> max_name_length <span class="sy1">=</span> <span class="nu0">44</span><span class="sy4">;</span> <span class="co1">//&lt; Update if necessary</span>
    <a href="string/basic_string.html"><span class="kw1233">std::<span class="me2">string</span></span></a> value<span class="br0">{</span> is_feature_supported<span class="br0">(</span>x<span class="br0">)</span> <span class="sy4">?</span> x.<span class="me1">value</span> <span class="sy4">:</span> <span class="st0">"------"</span> <span class="br0">}</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>value.<span class="me1">back</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">==</span> <span class="st0">'L'</span><span class="br0">)</span> value.<span class="me1">pop_back</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">//~ 201603L -&gt; 201603</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">separate_year_month</span><span class="br0">)</span> value.<span class="me1">insert</span><span class="br0">(</span><span class="nu0">4</span>, <span class="nu0">1</span>, <span class="st0">'-'</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">//~ 201603 -&gt; 2016-03</span>
    <span class="kw1">if</span> <span class="br0">(</span> <span class="br0">(</span>print.<span class="me1">supported_features</span> <span class="sy3">&amp;&amp;</span> is_feature_supported<span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span>
        or <span class="br0">(</span>print.<span class="me1">unsupported_features</span> <span class="sy3">&amp;&amp;</span> <span class="sy3">!</span>is_feature_supported<span class="br0">(</span>x<span class="br0">)</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
            <a href="io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <a href="io/manip/left.html"><span class="kw1783">std::<span class="me2">left</span></span></a> <span class="sy1">&lt;&lt;</span> <a href="io/manip/setw.html"><span class="kw1801">std::<span class="me2">setw</span></span></a><span class="br0">(</span>max_name_length<span class="br0">)</span>
                      <span class="sy1">&lt;&lt;</span> x.<span class="me1">name</span> <span class="sy1">&lt;&lt;</span> <span class="st0">" "</span> <span class="sy1">&lt;&lt;</span> value <span class="sy1">&lt;&lt;</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
    <span class="br0">}</span>
<span class="br0">}</span>
 
<span class="kw1">template</span><span class="sy1">&lt;</span>size_t N<span class="sy1">&gt;</span>
<span class="kw1">inline</span> <span class="kw4">void</span> show<span class="br0">(</span><span class="kw4">char</span> <span class="kw4">const</span><span class="sy2">*</span> title, CompilerFeature <span class="br0">(</span><span class="sy3">&amp;</span>features<span class="br0">)</span><span class="br0">[</span>N<span class="br0">]</span><span class="br0">)</span> <span class="br0">{</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">titles</span><span class="br0">)</span> <span class="br0">{</span>
        <a href="io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <a href="io/manip/left.html"><span class="kw1783">std::<span class="me2">left</span></span></a> <span class="sy1">&lt;&lt;</span> title <span class="sy1">&lt;&lt;</span> <span class="st0">" ("</span><span class="sy4">;</span>
        <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">counters</span><span class="br0">)</span>
            <a href="io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <a href="algorithm/count.html"><span class="kw1575">std::<span class="me2">count_if</span></span></a><span class="br0">(</span>
                <a href="iterator/begin.html"><span class="kw678">std::<span class="me2">begin</span></span></a><span class="br0">(</span>features<span class="br0">)</span>, <a href="iterator/end.html"><span class="kw682">std::<span class="me2">end</span></span></a><span class="br0">(</span>features<span class="br0">)</span>, is_feature_supported<span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">'/'</span><span class="sy4">;</span>
        <a href="io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> N <span class="sy1">&lt;&lt;</span> <span class="st0">")<span class="es1">\n</span>"</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">sort_by_date</span><span class="br0">)</span> <span class="br0">{</span>
        <a href="algorithm/sort.html"><span class="kw1622">std::<span class="me2">sort</span></span></a><span class="br0">(</span><a href="iterator/begin.html"><span class="kw678">std::<span class="me2">begin</span></span></a><span class="br0">(</span>features<span class="br0">)</span>, <a href="iterator/end.html"><span class="kw682">std::<span class="me2">end</span></span></a><span class="br0">(</span>features<span class="br0">)</span>,
            <span class="br0">[</span><span class="br0">]</span><span class="br0">(</span>CompilerFeature <span class="kw4">const</span><span class="sy3">&amp;</span> lhs, CompilerFeature <span class="kw4">const</span><span class="sy3">&amp;</span> rhs<span class="br0">)</span> <span class="br0">{</span>
                <span class="kw1">return</span> <a href="string/byte/strcmp.html"><span class="kw1149">std::<span class="me2">strcmp</span></span></a><span class="br0">(</span>lhs.<span class="me1">value</span>, rhs.<span class="me1">value</span><span class="br0">)</span> <span class="sy1">&lt;</span> <span class="nu0">0</span><span class="sy4">;</span>
            <span class="br0">}</span><span class="br0">)</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <span class="kw1">for</span> <span class="br0">(</span><span class="kw4">const</span> CompilerFeature<span class="sy3">&amp;</span> x <span class="sy4">:</span> features<span class="br0">)</span> <span class="br0">{</span>
        print_compiler_feature<span class="br0">(</span>x<span class="br0">)</span><span class="sy4">;</span>
    <span class="br0">}</span>
    <a href="io/cout.html"><span class="kw1762">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
<span class="br0">}</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">general_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++ GENERAL"</span>, cxx_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx11</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++11 CORE"</span>, cxx11_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx14</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++14 CORE"</span>, cxx14_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx14</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++14 LIB"</span> , cxx14_lib<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx17</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++17 CORE"</span>, cxx17_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx17</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++17 LIB"</span> , cxx17_lib<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx20</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++20 CORE"</span>, cxx20_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx20</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++20 LIB"</span> , cxx20_lib<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx23</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++23 CORE"</span>, cxx23_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx23</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++23 LIB"</span> , cxx23_lib<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx26</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">core_features</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++26 CORE"</span>, cxx26_core<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">cxx26</span> <span class="sy3">&amp;&amp;</span> print.<span class="me1">lib_features</span> <span class="br0">)</span> show<span class="br0">(</span><span class="st0">"C++26 LIB"</span> , cxx26_lib<span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">if</span> <span class="br0">(</span>print.<span class="me1">attributes</span><span class="br0">)</span> show<span class="br0">(</span><span class="st0">"ATTRIBUTES"</span>, attributes<span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span></pre></div></div>
<p>Possible output:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="text source-text"><pre class="de1">C++ GENERAL (3/3)
__cplusplus                                  202002
__cpp_exceptions                             199711
__cpp_rtti                                   199711
 
C++11 CORE (19/19)
__cpp_alias_templates                        200704
__cpp_attributes                             200809
__cpp_constexpr                              201907
__cpp_decltype                               200707
__cpp_delegating_constructors                200604
__cpp_inheriting_constructors                201511
__cpp_initializer_lists                      200806
__cpp_lambdas                                200907
__cpp_nsdmi                                  200809
__cpp_range_based_for                        201603
__cpp_raw_strings                            200710
__cpp_ref_qualifiers                         200710
__cpp_rvalue_references                      200610
__cpp_static_assert                          201411
__cpp_threadsafe_static_init                 200806
__cpp_unicode_characters                     200704
__cpp_unicode_literals                       200710
__cpp_user_defined_literals                  200809
__cpp_variadic_templates                     200704
 
C++14 CORE (9/9)
__cpp_aggregate_nsdmi                        201304
__cpp_binary_literals                        201304
__cpp_constexpr                              201907
__cpp_decltype_auto                          201304
__cpp_generic_lambdas                        201707
__cpp_init_captures                          201803
__cpp_return_type_deduction                  201304
__cpp_sized_deallocation                     ------
__cpp_variable_templates                     201304
 
... truncated ...</pre></div></div> 
</div>
<h3><span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

<tr class="t-dsc">
<td>  <a href="utility/feature_test.html" title="cpp/utility/feature test"><b>Library feature-test macros</b></a> <span class="t-mark-rev t-since-cxx20">(C++20)</span>
</td>
<td>  defined in the header <a href="header/version.html" title="cpp/header/version"><tt>&lt;version&gt;</tt></a>
</td></tr>


</table>
<h3><span class="mw-headline" id="External_links">External links</span></h3>
<table class="t-dsc-begin">

<tr class="t-dsc">
<td colspan="2">  <a rel="nofollow" class="external text" href="http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">The official document on Feature-Test Recommendations</a>
</td></tr>


<tr class="t-dsc">
<td colspan="2">  <a rel="nofollow" class="external text" href="https://github.com/makelinux/examples/blob/develop/cpp/features.cpp">Source code to dump compiler features</a>
</td></tr>

</table>

<!-- 
NewPP limit report
Preprocessor visited node count: 27963/1000000
Preprocessor generated node count: 16494/1000000
Post‐expand include size: 306823/2097152 bytes
Template argument size: 129502/2097152 bytes
Highest expansion depth: 14/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:14049-0!*!0!!en!*!* and timestamp 20220724131418 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=cpp/feature_test&amp;oldid=141269">https://en.cppreference.com/mwiki/index.php?title=cpp/feature_test&amp;oldid=141269</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/cpp/feature_test">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 23 July 2022, at 13:14.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 241,746 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 36.970 secs. -->
	</body>
<!-- Cached 20220724131418 -->
</html>